﻿
package com.hh.bss.util;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.net.MalformedURLException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * <p>Title: DOM4J解析XML时辅助类</p>
 * <p>Description: DOM4J解析XML时辅助类</p>
 */

public class DOM4JHelper {
	/**
	 * 根据文件得到XML文档
	 * @param file java.io.File : 文件
	 * @return Document : 相关的XML文档，如果是非法的XML文档，返回null
	 * @throws MalformedURLException
	 * @throws DocumentException
	 */
	public static Document getDocument(final File file) throws MalformedURLException,DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(file);
		return document;
	}
	/**
	 * 根据XML描述串得到相应的XML文档 
	 * @param xml String : XML描述
	 * @return Document : 相关的XML文档，如果XML描述不符合正确的XML格式，返回null
	 * @throws DocumentException : 
	 */
	public static Document getDocument(final String xml) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(new ByteArrayInputStream(xml.getBytes()));
		return document;
	}
	/**
	 * 根据XML结点元素取得对应的Property值，适用于以下四种情况，优先级从高到低
	 * 1.<pair key=' key1 ' value=' value 1 ' />
	 * 2.<pair key=' key2 '> value 2 </pair>
	 * 3.<pair key=' key3 '><![CDATA[ value 3 ]]></pair>
	 * 4.<pair><key> key4 </key><value> value 4 </value></pair>
	 * 分别返回以下四个Property:
	 * 1.[key=key1,value=value 1]
	 * 2.[key=key2,value=value 2]
	 * 3.[key=key3,value=value 3]
	 * 4.[key=key4,value=value 4] 
	 * @param element org.dom4j.Element : 结点元素
	 * @return com.silverfox.util.Property : 对应非空的Property值，如果XML结点元素不符合Property值要求，则返回null
	 */
	public static Property getProperty(final Element element){
		String key = element.attributeValue("key");
		if(StringHelper.isEmpty(key)){
			key = element.elementText("key");
			if(StringHelper.isEmpty(key)) return null;
			String value = element.attributeValue("value");
			if(StringHelper.isEmpty(value)) value = element.elementText("value");
			if(StringHelper.isEmpty(value)) return null;
			return new Property(key.trim(), value.trim());
		}else{
			String value = element.attributeValue("value");
			if(StringHelper.isEmpty(value)) value = element.getStringValue();
			if(StringHelper.isEmpty(value)) value = element.elementText("value");
			if(StringHelper.isEmpty(value)) return null;
			return new Property(key.trim(), value.trim());
		}
	}
	
    
}
